home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / dropbear_ssh.nasl < prev    next >
Text File  |  2005-01-14  |  7KB  |  209 lines

  1. #TRUSTED 3bac400464504ea62efb145f876c6dd74c9a05426a614eb77cb853ff10a5f6ab81173bb3b1bd10cc2e3154cd536796f69ffa9aa72e01bbd3e89e003c824a1f94fea62894df45d1a3a75eb65fd3d5a8a229eb609a8dc2cab1ad5f51c7195eb831546085535ee5fbafb9a47537a6ce6d5d01a4ba739351c52c97353c9ee65750e603e375cb15f9d40d5b66ea1d45a74786b9a77e5043798e8dafa289b4fa27fe36157e6f569c4ee2ab9a863cb5496aa5e8b89131bf95833aadc5fd9bdfb207f211ce4007ed07b24dbe063b80c7261a730d471f7ab874b0dc02626142d2afc1abd53486af6b20490c7c48da7aae2f921f348ff7bc1fcdecd8a7ae3ead595ebb81c318a5a2af6102e46e2753c1fef5a6bf478fd50512611b61e3ac2873a8d94d846662e445214a9a3f8c89d4da8678cff493f5507b066f2ec59b0eb0bdc548720c0a778dd2b0cf1267f7bdf379b25906482df26d0f72fa94c5dc9f98e09573fbdd4aab843afe4a2b11431fe503501685dda900226dc130847a1182d2040a6f1d9231e744020b73cb6dfeaf6f5212a0e40b24030351d89be45d56804c93faae17d3502cbdb13ff99e80029930b6bbf52d2bc0e48ff70e2b2415d1f61afc0462d3b91e8f4cbd5a73e435a57c41c0a5fde2c7f8bcb4dc45a780d7a8f8ab17bad557bd7aa644e7cd955910af154c78228fc1a41ec4acd2054062b85662896db441265b09
  2. #
  3. # (C) Tenable Network Security
  4. #
  5. # Modified by Nicolas Pouvesle to actually test for the bug
  6. # actual test will *not* DoS dropbear
  7. if (description) {
  8.   script_id(14234);
  9.   script_version("1.9");
  10.   script_bugtraq_id(10803);
  11.  
  12.   if (defined_func("script_xref")) {
  13.     script_xref(name:"OSVDB", value:"8137");
  14.   }
  15.  
  16.   name["english"] = "Dropbear remote DSS SSH vuln";
  17.   script_name(english:name["english"]);
  18.  
  19.   desc["english"] = "
  20. The remote host is running Dropbear prior to version 0.43.  
  21. There is a flaw in this version of Dropbear which would
  22. enable a remote attacker to gain control of the system
  23. from a remote location.
  24.  
  25. Solution : Upgrade to at least version 0.43 of Dropbear. 
  26.  
  27. See also : http://www.securityfocus.com/bid/10803 
  28.  
  29. Risk factor : High";
  30.   script_description(english:desc["english"]);
  31.  
  32.   summary["english"] = "Dropbear remote DSS SSH vuln check";
  33.   script_summary(english:summary["english"]);
  34.  
  35.   script_category(ACT_GATHER_INFO);
  36.   script_copyright(english:"This script is Copyright (C) Tenable Network Security");
  37.   family["english"] = "Gain root remotely";
  38.   script_family(english:family["english"]);
  39.  
  40.   script_require_ports("Services/ssh", 22);
  41.   script_dependencie("ssh_detect.nasl");
  42.   exit(0);
  43. }
  44.  
  45.  
  46. include ('ssh_func.inc');
  47.  
  48. port = get_kb_item ("Services/ssh");
  49. if (!port)
  50.   port = 22;
  51. if (!get_port_state (port))
  52.   exit (0);
  53.  
  54. login = kb_ssh_login ();
  55. pub = kb_ssh_publickey ();
  56. priv = kb_ssh_privatekey ();
  57. pass = kb_ssh_passphrase ();
  58.  
  59. if (login && pub && priv)
  60. {
  61.  soc = open_sock_tcp (port);
  62.  if ( ! soc ) exit(0);
  63.  ret = ssh_login (socket: soc, login: login, password: NULL, pub: pub, priv: priv, passphrase:pass);
  64.  
  65.  close (soc);
  66.  
  67.  if (ret == 0)
  68.  {
  69.     authenticated = 0;
  70.       socket = open_sock_tcp (port);
  71.     if ( ! socket ) exit(0);
  72.       if (socket)
  73.       {
  74.            server_user = tolower (login);
  75.            init ();
  76.            server_version = ssh_exchange_identification (socket:socket);
  77.    
  78.            # Like ssh_login has succeeded we don't need to test return
  79.            # It means SSH server is not vulnerable.
  80.            # However I prefer let if (!xxx) {close();exit()} ...
  81.  
  82.            if (!server_version)
  83.            {
  84.                  close (socket);
  85.                  exit(0);
  86.            }
  87.    
  88.            ret = ssh_kex2 (socket: socket, server_version:server_version);
  89.            if (ret!= 0)
  90.            {
  91.                  close (socket);
  92.                  exit(0);
  93.            }
  94.  
  95.            payload = putstring (buffer:"ssh-userauth");
  96.            send_ssh_packet (socket: socket, payload: payload, code:raw_string (0x05));
  97.            payload = recv_ssh_packet (socket:socket);
  98.            if (ord (payload[0]) != 6)
  99.            {
  100.                  close (socket);
  101.                  exit(0);
  102.            }
  103.  
  104.            payload = putstring (buffer: server_user) + putstring (buffer: "ssh-connection") + putstring (buffer:"none");
  105.            send_ssh_packet (socket: socket, payload: payload, code: raw_int8 (i:50));
  106.  
  107.            payload = recv_ssh_packet (socket:socket);
  108.            if (ord (payload[0]) != 51)
  109.            {
  110.                  close (socket);
  111.                  exit(0);
  112.            }
  113.  
  114.            support = getstring (buffer: payload, pos:1);
  115.            if (!ereg (string: support, pattern:"publickey"))
  116.            {
  117.                  close (socket);
  118.                  exit(0);
  119.            }
  120.  
  121.            blobpub = base64decode (str:pub);
  122.            payload = putstring (buffer: server_user) + putstring (buffer: "ssh-connection") + putstring (buffer: "publickey") + raw_int8 (i:1);
  123.            to_hash = putstring (buffer: session_id) + raw_int8 (i:50);
  124.            typestr = getstring (buffer: blobpub, pos:0);
  125.  
  126.            ### We must not quit here because user provide a RSA key !!!
  127.            if (typestr >< "ssh-dss")
  128.            {
  129.                 next = 4 + strlen (typestr);
  130.                 p = getstring (buffer: blobpub, pos:next);
  131.                 next = next + 4 + strlen (p);
  132.                 q = getstring (buffer: blobpub, pos:next);
  133.                 next = next + 4 + strlen (q);
  134.                 g = getstring (buffer: blobpub, pos:next);
  135.                 next = next + 4 + strlen (g);
  136.                 pub_key = getstring (buffer: blobpub, pos:next);
  137.                 privkey = pem_to_dsa (priv: priv, passphrase:passphrase);
  138.                 if (!privkey)
  139.                 {
  140.                       close (socket);
  141.                       exit(0);
  142.                 }
  143.  
  144.                 payload += putstring (buffer: "ssh-dss") + putstring (buffer:blobpub);
  145.                 to_hash += payload;
  146.                 hash = SHA1 (to_hash);
  147.                 signature = dsa_do_sign (p: p, q: q, g: g, pub: pub_key, priv: privkey, data:hash);
  148.  
  149.                 if (!signature)
  150.                 {
  151.                       close (socket);
  152.                       exit(0);
  153.                 }
  154.            
  155.                 signature = putstring (buffer: "ssh-dss") + crap (data: raw_string (0x00), length:44);
  156.                 payload += putstring (buffer:signature);
  157.                 send_ssh_packet (socket: socket, payload: payload, code: raw_int8 (i:50));
  158.                 payload = recv_ssh_packet (socket:socket);
  159.  
  160.                 if (strlen (payload) > 1)
  161.                       authenticated = 1;
  162.             
  163.                 close (socket);
  164.            
  165.                 if (!authenticated)
  166.                      security_hole (port);
  167.                 exit(0);
  168.            }
  169.       }
  170.  }
  171.   close (socket);
  172. }
  173.  
  174.  
  175. ##### If we can not test flaw, we can test banner ######
  176.  
  177. #[root@f00dikator dropbear-0.43]# telnet localhost 22
  178. #Trying 127.0.0.1...
  179. #Connected to localhost.
  180. #Escape character is '^]'.
  181. #SSH-2.0-dropbear_0.43
  182.  
  183. banner = get_kb_item("SSH/banner/" + port );
  184.  
  185. if (! banner)
  186.   exit(0);
  187.  
  188.   desc = "
  189. The remote host is running Dropbear prior to version 0.43.  
  190. There is a flaw in this version of Dropbear which would
  191. enable a remote attacker to gain control of the system
  192. from a remote location.
  193.  
  194. *** Nessus reports this vulnerability using only
  195. *** information that was gathered. To really test
  196. *** the vulnerability Nessus need an SSH account with
  197. *** correct dsa keys.
  198.  
  199. Solution : Upgrade to at least version 0.43 of Dropbear. 
  200.  
  201. See also : http://www.securityfocus.com/bid/10803 
  202.  
  203. Risk factor : High";
  204.  
  205. # version 0.28 thru 0.42 are vulnerable
  206. if (egrep(string:banner, pattern:"-dropbear_0\.(2[89]|3[0-9]|4[0-2])") )
  207.     security_hole(port:port, data:desc);
  208.  
  209.